package br.com.cast.notafiscal.pagina;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.spring.injection.annot.SpringBean;

import br.com.cast.modelo.NotaFiscal;
import br.com.cast.modelo.Produto;
import br.com.cast.produto.HomePage;
import br.com.cast.servico.INotaFiscalServico;
import br.com.cast.util.ComponentUtil;

public class ListarNotaFiscal extends Panel {

	@SpringBean
	private INotaFiscalServico notaFiscalServico;

	private IncluirNotaFiscal incluirNotalFiscal;

	public ListarNotaFiscal(String id) {
		super(id);

		setOutputMarkupId(true);

		incluirNotalFiscal = new IncluirNotaFiscal(HomePage.CONTENT_ID);

		montarViewNotaFiscal();

	}

	private void montarViewNotaFiscal() {

		DataView<NotaFiscal> viewNotaFiscal = new DataView<NotaFiscal>(
				"viewNotaFiscal", notaFiscalServico) {

			protected void populateItem(final Item<NotaFiscal> item) {

				final NotaFiscal notaFiscal = item.getModelObject();

				item.add(new Label("numero"));
				item.add(new Label("valorTotalProdutos", "R$: "
						+ notaFiscal.getValorTotalProdutos()));

				ListView<Produto> produtos = new ListView<Produto>(
						"produtosNF", notaFiscal.getProdutos()) {

					@Override
					protected void populateItem(ListItem<Produto> itemProduto) {
						Produto p = itemProduto.getModelObject();

						itemProduto
								.add(new Label("descricao", p.getDescricao()));
						itemProduto.add(new Label("valor", "R$: "
								+ p.getValor()));
					}
				};

				item.add(produtos);

				item.add(new Link<NotaFiscal>("alterar") {

					@Override
					public void onClick() {
						incluirNotalFiscal.atualizarCampo(notaFiscal);
						HomePage homepage = ComponentUtil.getTemplate(this);
						homepage.replace(incluirNotalFiscal);

					}

				});

				item.add(new AjaxLink<NotaFiscal>("remover") {

					public void onClick(AjaxRequestTarget target) {

						notaFiscalServico.excluir(notaFiscal);
						HomePage template = ComponentUtil.getTemplate(this);
						template.success("Registro excluído com sucesso!");

						target.add(template.get("msgErro"));
						target.add(template.get("msgSucesso"));
						target.add(template.get(HomePage.CONTENT_ID));

					}

				});

			}

		};

		viewNotaFiscal.setItemsPerPage(4);

		add(new PagingNavigator("pagingNavigator", viewNotaFiscal));

		add(viewNotaFiscal);

	}

}
